AWS CLI設定ファイルの使い方: IAMロールの引き受けとMFA認証の設定方法
AWS CLIやSDKを使用する際、~/.aws/config
と ~/.aws/credentials
の設定は欠かせません。
これらのファイルを正しく設定することで、複数のAWSアカウントやIAMロールを簡単に切り替えたり、セキュリティを強化した運用が可能になります。
この記事では、IAMロールの引き受け設定やMFA認証の構成について、実際の設定例を基に詳しく解説します。
1. AWS CLIの設定ファイルとは
AWS CLIでは、以下の2つの設定ファイルを使用します。
~/.aws/config
1.1 ~/.aws/config
ファイルは、AWS CLIのプロファイル設定やリージョン、出力形式などの設定を管理するためのファイルです。
これにより、複数のプロファイルを定義して、異なるAWSアカウントや設定を簡単に切り替えることができます。
[default]
output = json
region = ap-northeast-1
[profile ml-dev-account]
role_arn = arn:aws:iam::123456789012:role/tomozou
source_profile = default
mfa_serial = arn:aws:iam::987654321098:mfa/tomozou
output = json
region = ap-northeast-1
[profile ml-prd-accout]
role_arn = arn:aws:iam::567890123456:role/tomozou
source_profile = default
mfa_serial = arn:aws:iam::987654321098:mfa/tomozou
output = json
region = ap-northeast-1
主な設定項目
profile
: プロファイル名を定義します。デフォルトプロファイルは[default]
として指定されます。region
: デフォルトのリージョンを指定します。例: ap-northeast-1。output
: CLIコマンドの出力形式を指定します。例: json, text, table。role_arn
: Assume Role(ロールの引き受け)を行うためのロールARNを指定します。(※Assume Roleを使用する場合必須)source_profile
: ロールを引き受けるための元のプロファイルを指定します。(※Assume Roleを使用する場合必須)mfa_serial
: 多要素認証(MFA)デバイスのARNを指定します。
~/.aws/credentials
1.2 ~/.aws/credentials
ファイルは、AWS CLIやSDKが使用する認証情報(アクセスキーIDとシークレットアクセスキー)を管理するためのファイルです。
これにより、複数のAWSアカウントの認証情報を安全に管理できます。
[default]
aws_access_key_id = ABCDEFGHIJKAAAAAA
aws_secret_access_key = abcdefghijkkkkkkkkkkkkk
主な設定項目
aws_access_key_id
: AWSアカウントのアクセスキーIDを指定します。aws_secret_access_key
: AWSアカウントのシークレットアクセスキーを指定します。
2. 実行例
2.1 ml-dev-account プロファイルを使用(S3バケットリストを確認する)
以下のコマンドを実行すると、ml-dev-account
プロファイルの設定に基づいてIAMロールを引き受けます。
aws s3 ls --profile ml-dev-account
動作の流れ:
-
default
プロファイルの認証情報を使用して、arn:aws:iam::123456789012:role/tomozou
のIAMロールを引き受けます。 -
CLIがMFA認証を要求する場合、次のようなプロンプトが表示されます
Enter MFA code for arn:aws:iam::987654321098:mfa/tomozou:
-
正しいMFAトークンコードを入力すると、一時的な認証情報(セッション)が生成されます。
-
IAMロールの権限を使用して、S3バケットのリストを取得します。
2.2 ml-prd-account プロファイルを使用(EC2インスタンスリストを確認する)
以下のコマンドを実行すると、ml-prd-account
プロファイルの設定に基づいてIAMロールを引き受けます。
aws ec2 describe-instances --profile ml-prd-account
動作の流れ:
-
default
プロファイルの認証情報を使用して、rn:aws:iam::567890123456:role/tomozou
のIAMロールを引き受けます。 -
CLIがMFA認証を要求する場合、次のようなプロンプトが表示されます
Enter MFA code for arn:aws:iam::987654321098:mfa/tomozou:
-
正しいMFAトークンコードを入力すると、一時的な認証情報(セッション)が生成されます。
-
IAMロールの権限を使用して、EC2インスタンスの情報を取得します。
おまけ
Q1. default プロファイルを使わずに設定できるか?
default
プロファイルを使わずに、各プロファイルごとに認証情報を設定することもできます。
ただし、個人的には同じ認証情報を複数のプロファイルで使う場合、default
を source_profile
として指定する方が、認証情報の管理が簡単で一元化できるため運用が効率的だと考えています。
Q2. mfa_serial を設定しないとどうなるか?
mfa_serial
を設定しない場合、MFA認証が必要なIAMロールを引き受けることができません。ただし、MFAが不要なロールであれば、mfa_serial
を省略しても問題ありません。
ただし、MFAを設定しない場合は、セキュリティリスクが高まる可能性があるため、特に重要な操作や機密性の高いリソースにアクセスする場合は、MFAを有効にすることを強く推奨します。
Q3. 一時的なセッションの有効期限は?
デフォルトでは、一時的なセッションの有効期限は 1時間 です。
必要に応じて、duration_seconds
を使用して有効期限を変更できます(最大12時間(43200秒)まで)。
ただし、セッションの有効時間を長くすることでセキュリティリスクが高まる可能性があるため、その点には注意が必要です。
[profile ml-dev-account]
role_arn = arn:aws:iam::123456789012:role/tomozou
source_profile = default
mfa_serial = arn:aws:iam::987654321098:mfa/tomozou
duration_seconds = 43200
まとめ
~/.aws/config
と~/.aws/credentials
を正しく設定することで、複数のAWSアカウントやIAMロールを効率的に管理できます。- MFA認証 を設定することで、セキュリティを強化できます。
- Assume Role を活用することで、アクセスキーを直接使用せずに安全にAWSリソースにアクセスできます。
これらの設定を活用して、安全かつ効率的にAWS CLIやSDKを使いこなしましょう!